const db = require('../db')
const bcryptjs = require('bcryptjs')
const schema = require('../schema')
const {validationUtil, procWhere, procOrder} = require('./util')
const auth = require('../auth')
const captcha = require('../util/captcha')
const {redisCli} = require('../redis')
const router = require('../router')

// 新增员工 
exports.addMember = (req, res) => {
    let meminfo = req.body
    // 1.检测表单数据是否合法；
    validationUtil(schema.memberSchema.addMember, meminfo) // 验证失败抛异常，被全局错误处理器处理 
    
    // 2.检测用户名是否被占用；
    db.Member.findAll({
        where: {
            credential_type: meminfo.credential_type,
            credential_no: meminfo.credential_no 
        }
    }).then(results => {
        // console.log('results', results)
        // 员工已存在  
        if(results.length > 0) {
            return res.cc('员工已存在！')
        }
        // 插入新员工
        db.Member.create({
            ...meminfo
        }).then(result => {
            console.log('insert result', JSON.stringify(result)) 
            // 判断影响行数是否为1
            if(!result || !result.name) return res.cc('添加员工失败，请稍后再试！')
            // 注册成功 
            res.cc('添加成功！', 0)
        }).catch(err => {
            res.cc(err)
        })
    }).catch(err => {
        res.cc(err)
    })
    
}


// 员工列表  
exports.memberList = (req, res) => {
    console.log('router:', router)
    let params = req.body
    // 1.检测表单数据是否合法；
    validationUtil(schema.memberSchema.memberList, params) // 验证失败抛异常，被全局错误处理器处理 
    
    // 2.查询 
    let offset = (params.currentPage-1)*params.pageSize 
    let limit = params.pageSize 
    let where = procWhere(params.where, db.MemberAttributes) 
    let order = procOrder(params.sort)
    let options = {
            offset,
            limit,
            where,
        }
    if(order) options.order = order 
    db.Member.findAll(options).then(results => {
        // console.log('results: ', results)
        // 查询total 
        db.Member.findAll({
            attributes: [
                [db.Sequelize.fn('COUNT', db.Sequelize.col('*')), 'cnt']
            ],
            where
        }).then(results2 => {
            let total = JSON.parse(JSON.stringify(results2))[0].cnt  
            res.json({
                status: 0,
                message: 'success',
                data: {results, total}
            })
        }).catch(err => {
            res.cc(err)
        })
    }).catch(err => {
        res.cc(err)
    })
    
}

// 员工删除  
exports.memberDelete = (req, res) => {
    let params = req.body
    console.log('params', params)
    // 1.检测表单数据是否合法；
    validationUtil(schema.memberSchema.memberDelete, params) // 验证失败抛异常，被全局错误处理器处理 
    if(!params.ids.length) return res.cc('参数ids为空,无需删除', 0)
    
    // 2.查询 
    db.Member.destroy({
        where: {
            id: params.ids
        }
    }).then(results => {
        console.log('results', results)
        res.json({
            status: 0,
            message: 'success',
            data: results
        })
    }).catch(err => {
        res.cc(err)
    })
    
}

// 更新员工 
exports.memberUpdate = (req, res) => {
    let meminfo = req.body
    // 1.检测表单数据是否合法；
    validationUtil(schema.memberSchema.memberUpdate, meminfo) // 验证失败抛异常，被全局错误处理器处理 
    
    // 2.检测用户名是否被占用；
    db.Member.findAll({
        where: {
            id: meminfo.id  
        }
    }).then(results => {
        console.log('results', results)
        // 员工存在  
        if(!results.length) {
            return res.cc(`员工[id=${meminfo.id}]不存在！`)
        }
        // 更新员工信息
        db.Member.update(meminfo, {
            where: {
                id: meminfo.id 
            }
        }).then(result => {
            console.log('update result', JSON.stringify(result)) 
            // 判断影响行数是否为1
            // if(!result || !result.name) return res.cc('添加员工失败，请稍后再试！')
            // 更新成功 
            res.cc('更新成功！', 0)
        }).catch(err => {
            res.cc(err)
        })
    }).catch(err => {
        res.cc(err)
    })
    
}